﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using JA.Negocios;
using System.IO;

namespace JA.Web.Apresentacao
{
    public partial class CadastroBairro : System.Web.UI.Page
    {
        UsuarioVO usuarioVO = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            usuarioVO = (UsuarioVO)this.Session["userActive"];
            if (usuarioVO == null || !usuarioVO.cadBai)
                this.Response.Redirect("~/BackOffice.aspx");

            if (!IsPostBack)
            {
                Util.HabilitarCampos(false, this.panelCad);

                UfVO UfVO = UfVO.CreateUfVO("-1", "Todos");
                List<UfVO> UfVOs = new List<UfVO>();
                UfVOs.Add(UfVO);
                UfVOs.AddRange(ModelBO.getUfs());
                this.ddlEstado.DataSource = UfVOs;
                this.ddlEstado.DataBind();

                CidadeVO cidadeVO = CidadeVO.CreateCidadeVO(-1, "Todas");
                List<CidadeVO> cidadeVOs = new List<CidadeVO>();
                cidadeVOs.Add(cidadeVO);
                cidadeVOs.AddRange(ModelBO.getCidades());
                this.ddlCidade.DataSource = cidadeVOs;
                this.ddlCidade.DataBind();

                this.ddlCadEstado.DataSource = ModelBO.getUfs();
                this.ddlCadEstado.DataBind();

                ddlCadEstado_SelectedIndexChanged(null, null);
            }

        }

        protected void ddlCadEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.ddlCadEstado.Items.Count > 0)
                this.ddlCadCidade.DataSource = ModelBO.getCidades(null, null, this.ddlCadEstado.SelectedValue);
            else
                this.ddlCadCidade.DataSource = null;
            this.ddlCadCidade.DataBind();
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnSalvar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            BairroVO bairroVO = null;
            bool novoRegistro = false;

            try
            {

                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadId.Text))
                {
                    bairroVO = BairroVO.CreateBairroVO();
                    bairroVO.cadastro = DateTime.Now;
                    bairroVO.cadastradoPor = usuarioVO.usuario;

                    novoRegistro = true;
                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    bairroVO = ModelBO.getBairro(Int32.Parse(this.txtCadId.Text), null);
                }

                bairroVO.bairro = this.txtCadBairro.Text;
                bairroVO.cidade.idCidade = int.Parse(this.ddlCadCidade.SelectedValue);
                bairroVO.cidade.uf.siglaUf = this.ddlCadEstado.SelectedValue;
                bairroVO.edicao = DateTime.Now;
                bairroVO.editadoPor = usuarioVO.usuario;

                //Chama metodo para salvar ou criar novo registro
                if (novoRegistro)
                    ModelBO.newBairro(bairroVO);
                else
                    ModelBO.setBairro(bairroVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";

                // Trava bot&atilde;o de edi&ccedil;&atilde;o
                this.btnEditar.Enabled = false;

                // Trava bot&atilde;o de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o bot&atilde;o salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

                Util.HabilitarCampos(false, this.panelCad);

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnPesquisa
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnPesquisa_Click(object sender, EventArgs e)
        {

            //Declara objetos
            int? idBairro = null;
            string bairro = null;
            int? cidade = null;
            string sigla = null;

            try
            {
                if (!string.IsNullOrEmpty(this.txtId.Text))
                {
                    idBairro = Int32.Parse(this.txtId.Text);
                }
                if (!string.IsNullOrEmpty(this.txtBairro.Text))
                {
                    bairro = this.txtBairro.Text;
                }

                if (!this.ddlCidade.SelectedValue.Equals("-1"))
                {
                    cidade = int.Parse(this.ddlCidade.SelectedValue);
                }

                if (!this.ddlEstado.SelectedValue.Equals("-1"))
                {
                    sigla = this.ddlEstado.SelectedValue;
                }

                //
                this.grvResultado.DataSource = ModelBO.getBairros(idBairro, bairro, sigla, cidade);

                //Vincula os dados
                this.grvResultado.DataBind();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento do bot&atilde;o btnCancelar
        /// </summary>
        /// <param name="sender">Objeto disparador do evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            this.tabBairro.ActiveTabIndex = 0;

            // Desabilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(false, this.panelCad);

            // Destrava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text);

            // Detrava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = !string.IsNullOrEmpty(this.txtCadId.Text);

            // Detrava bot&atilde;o de novo
            this.btnNovo.Enabled = true;

            // Desabilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = false;

        }

        protected void grvResultado_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {

                Label lblEstado = e.Row.FindControl("lblEstado") as Label;
                lblEstado.Text = ((BairroVO)e.Row.DataItem).cidade.uf.ToString();

            }
        }

        protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            BairroVO bairroVO = null;
            int idBairro = 0;

            try
            {
                //
                idBairro = int.Parse(((ImageButton)sender).CommandArgument);

                //
                bairroVO = ModelBO.getBairro(idBairro, null);

                this.txtCadId.Text = idBairro.ToString();
                this.txtCadBairro.Text = bairroVO.bairro;
                this.ddlCadEstado.SelectedValue = bairroVO.cidade.uf.siglaUf;
                ddlCadEstado_SelectedIndexChanged(null, null);
                this.ddlCadCidade.SelectedValue = bairroVO.cidade.idCidade.ToString();
                this.ltCadastradoPor.Text = bairroVO.cadastradoPor;
                this.ltEditadoPor.Text = bairroVO.editadoPor;
                this.ltDataCadastro.Text = ((DateTime)bairroVO.cadastro).ToString();
                this.ltDataEdicao.Text = (bairroVO.edicao==null?"":((DateTime)bairroVO.edicao).ToString());

                //
                this.tabBairro.ActiveTabIndex = 1;

                //
                Util.HabilitarCampos(false, this.panelCad);

                //
                this.btnEditar.Enabled = true;

                //
                this.btnExcluir.Enabled = true;

                //
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        /// <summary>
        /// Manipula o evento editar do web form
        /// </summary>
        /// <param name="sender">Objeto disparador de evento</param>
        /// <param name="e">Argumento do evento</param>
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = false;

            // Trava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = false;

            // Trava bot&atilde;o de novo
            this.btnNovo.Enabled = false;

            // Habilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = true;

            this.txtCadBairro.Focus();
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelCad);
            ddlCadEstado_SelectedIndexChanged(null, null);
            this.ltCadastradoPor.Text = "";
            this.ltEditadoPor.Text = "";
            this.ltDataCadastro.Text = "";
            this.ltDataEdicao.Text = "";

            // Habilita os campos para edi&ccedil;&atilde;o
            Util.HabilitarCampos(true, this.panelCad);

            // Trava apenas o text box do ID
            this.txtCadId.Enabled = false;

            // Trava bot&atilde;o de edi&ccedil;&atilde;o
            this.btnEditar.Enabled = false;

            // Trava bot&atilde;o de exclusao
            this.btnExcluir.Enabled = false;

            // Trava bot&atilde;o de novo
            this.btnNovo.Enabled = false;

            // Habilita o bot&atilde;o salvar
            this.btnSalvar.Enabled = true;

            this.txtCadBairro.Focus();

        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            BairroVO bairroVO = null;

            try
            {
                //Cria objeto
                bairroVO = BairroVO.CreateBairroVO();

                bairroVO.idBairro = Int32.Parse(this.txtCadId.Text);

                if (ModelBO.getImovelXBairroCount(bairroVO.idBairro) > 0)
                {
                    Util.ExibeAlert(this, "Há imóveis associados a este bairro. Exclusão não permitida.");
                    return;
                }
                
                //Chama metodo para salvar ou criar novo registro
                ModelBO.delBairro(bairroVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelCad);
                ddlCadEstado_SelectedIndexChanged(null, null);
                this.ltCadastradoPor.Text = "";
                this.ltEditadoPor.Text = "";
                this.ltDataCadastro.Text = "";
                this.ltDataEdicao.Text = "";

                // Trava bot&atilde;o de edi&ccedil;&atilde;o
                this.btnEditar.Enabled = false;

                // Trava bot&atilde;o de exclusao
                this.btnExcluir.Enabled = false;

                // Desabilita o bot&atilde;o salvar
                this.btnSalvar.Enabled = false;

                // Habilida o botao novo
                this.btnNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
            
        }

    }
}
